<?php



class Navig {
	
	
	const ACCUEIL='affiche.php';
	const FIRST_CONFIG='first_config.php';
	private static $semaineActuelle;
	private static $weekParam='semaine';
	
	
	public static function getPageName(){
		return basename($_SERVER['PHP_SELF']); //ne retient que le nom de fichier
	}
	
	
	public static function redirect($direction){
		header('Location: '.$direction);
		//une redirection exécute un nouveau get > il faut donc sauvegarder les messages
		Session::persisteControlerForRedirection('Message');
	}
	
	
	public static function getNavigPanel($onglets){
		$navig='<div class="navigation">'.PHP_EOL;
		foreach($onglets as $onglet){
			$navig.='<a href="'.$onglet['lien'].'">'.$onglet['label'].'</a>'.PHP_EOL;
		}
		$navig.='</div>'.PHP_EOL;
		
		return $navig;
	}
	
	
	public static function getWeekPanel(){
		$panel='<p class="navigation">';
		$panel.=' <a href="'.self::getPrevWeekLink().'">Semaine précédente</a>';
		$panel.=' <a href="'.self::getThisWeekLink().'">Cette semaine</a>';
		$panel.=' <a href="'.self::getNextWeekLink().'">Semaine suivante</a>';
		$panel.='</p>';
		return $panel;
	}
    
    
	private static function getPrevWeekLink(){
		return self::getSiblingWeekLink(-7);
	}
	
	private static function getThisWeekLink(){
		return Navig::getPageName();
	}
	
	private static function getNextWeekLink(){
		return self::getSiblingWeekLink(7);
	}
	
	private static function getSiblingWeekLink($nbJours){
		$semaine=self::getSemaineSelectionnee();
		$premier=Date::ajouterJours($semaine['debut'],$nbJours);
		$code=self::encodeSemaine($premier);
		return Navig::getPageName().'?'.self::$weekParam.'='.$code;
	}
    
    
	public static function getSemaineSelectionnee(){
		if(self::$semaineActuelle==null){
			$annee=0;
			$noSemaine=0;
			//dans le cas ou le code semaine est renseigné
			if(isset($_GET[self::$weekParam])){
				$decodage=self::decodeSemaine($_GET[self::$weekParam]);
				$annee=$decodage[0];
				$noSemaine=$decodage[1];
			}
			self::$semaineActuelle=Date::getSemaine($annee,$noSemaine);
		}
		return self::$semaineActuelle;
	}
	
	
	//Il est conseillé de prendre le premier jour de la semaine car il donnera la bonne année.
	private static function encodeSemaine($premierJour){
		$annee=date('Y',$premierJour);
		$semaine=date('W',$premierJour);
		return $annee.'-'.$semaine;
	}
	
	
	private static function decodeSemaine($codeSemaine){
		//si le format se décompose bien en 2 valeurs
		$explode=explode('-',$codeSemaine);
		if(count($explode)==2){
			//si l'année semble est un nombre entre 2001 et 2099
			if(is_numeric($explode[0]) && $explode[0]<2100 && $explode[0]>2000){
				$annee=$explode[0];
			}
			//si le numéro de semaine est un nombre entre 1 et 52
			if(is_numeric($explode[1]) && $explode[1]<53 && $explode[1]>0){
				$noSemaine=$explode[1];
			}
		}
		return array($annee,$noSemaine);
	}
	
	
	public static function goToAccueil(){
		self::redirect(self::ACCUEIL);
	}


}



 
?>